home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / lib / rcscripts / awk / genenviron.awk < prev   
Text File  |  2006-04-25  |  4KB  |  183 lines

  1. # Copyright 1999-2005 Gentoo Foundation
  2. # Distributed under the terms of the GNU General Public License v2
  3.  
  4. BEGIN {
  5.  
  6.     extension("/lib/rcscripts/filefuncs.so", "dlload")
  7.  
  8.     # Get our environment variables
  9.     SVCDIR = ENVIRON["SVCDIR"]
  10.     if (SVCDIR == "") {
  11.         eerror("Could not get SVCDIR!")
  12.         exit 1
  13.     }
  14.  
  15.     pipe = "ls -1 /etc/env.d/."
  16.     while ((pipe | getline tmpstring) > 0)
  17.         scripts = scripts " /etc/env.d/" tmpstring
  18.     close(pipe)
  19.  
  20.     split(scripts, TMPENVFILES)
  21.  
  22.     # Make sure that its a file we are working with,
  23.     # and do not process scripts, source or backup files.
  24.     # NOTE:  do not use 'for (x in TMPENVFILES)', as gawk
  25.     #        have this notion that it should mess with the
  26.     #        order it list things then ....
  27.     for (x = 1;;x++) {
  28.     
  29.         if (x in TMPENVFILES) {
  30.         
  31.             if ((isfile(TMPENVFILES[x])) &&
  32.                 (TMPENVFILES[x] !~ /((\.(sh|c|bak))|\~)$/)) {
  33.  
  34.                 ENVCOUNT++
  35.  
  36.                 ENVFILES[ENVCOUNT] = TMPENVFILES[x]
  37.             }
  38.         } else
  39.             break
  40.     }
  41.  
  42.     if (ENVCOUNT == 0) {
  43.  
  44.         eerror("No files to process!")
  45.         exit 1
  46.     }
  47.  
  48.     ENVCACHE = SVCDIR "/envcache"
  49.     SHPROFILE = "/etc/profile.env"
  50.     CSHPROFILE = "/etc/csh.env"
  51.  
  52.     # SPECIALS are treated differently.  For each env.d file, the variables are
  53.     # appended seperated with a ':'.  If not in specials, for each env.d file,
  54.     # the variable are just set to the new value.
  55.     tmpspecials = \
  56.         "ADA_INCLUDE_PATH:ADA_OBJECTS_PATH:CLASSPATH:" \
  57.         "CONFIG_PROTECT:CONFIG_PROTECT_MASK:INFOPATH:" \
  58.         "KDEDIRS:LDPATH:MANPATH:PATH:PKG_CONFIG_PATH:" \
  59.         "PRELINK_PATH:PRELINK_PATH_MASK:PYTHONPATH:ROOTPATH"
  60.     split(tmpspecials, SPECIALS, ":")
  61.  
  62.     unlink(ENVCACHE)
  63.  
  64.     for (count = 1;count <= ENVCOUNT;count++) {
  65.         
  66.         while ((getline < (ENVFILES[count])) > 0) {
  67.  
  68.             # Filter out comments
  69.             if ($0 !~ /^[[:space:]]*#/) {
  70.  
  71.                 split($0, envnode, "=")
  72.  
  73.                 if (envnode[2] == "")
  74.                     continue
  75.  
  76.                 if ($0 == "")
  77.                     continue
  78.  
  79.                 # LDPATH should not be in environment
  80.                 if (envnode[1] == "LDPATH")
  81.                     continue
  82.  
  83.                 # In bash there should be no space between the variable name and
  84.                 # the '=' ...
  85.                 if (envnode[1] ~ /[^[:space:]]*[[:space:]]+$/)
  86.                     continue
  87.  
  88.                 # strip variable name and '=' from data
  89.                 sub("^[[:space:]]*" envnode[1] "[[:space:]]*=", "")
  90.                 # strip all '"' and '\''
  91.                 gsub(/\"/, "")
  92.                 gsub(/\'/, "")
  93.                 # strip leading and trailing spaces
  94.                 gsub(/^[[:space:]]*/, "")
  95.                 gsub(/[[:space:]]*$/, "")
  96.  
  97.                 if (envnode[1] in ENVTREE) {
  98.  
  99.                     DOSPECIAL = 0
  100.  
  101.                     for (x in SPECIALS) {
  102.  
  103.                         # Is this a special variable ?
  104.                         if (envnode[1] == SPECIALS[x])
  105.                             DOSPECIAL = 1
  106.                     }
  107.  
  108.                     if (DOSPECIAL) {
  109.                         split(ENVTREE[envnode[1]], tmpstr, ":")
  110.  
  111.                         # Check that we do not add dups ...
  112.                         NODUPS = 1
  113.                         for (x in tmpstr)
  114.                             if (tmpstr[x] == $0)
  115.                                 NODUPS = 0
  116.                         
  117.                         if (NODUPS)
  118.                             # Once again, "CONFIG_PROTECT" and "CONFIG_PROTECT_MASK"
  119.                             # are handled differently ...
  120.                             if ((envnode[1] == "CONFIG_PROTECT") || (envnode[1] == "CONFIG_PROTECT_MASK"))
  121.                                 ENVTREE[envnode[1]] = ENVTREE[envnode[1]] " " $0
  122.                             else
  123.                                 ENVTREE[envnode[1]] = ENVTREE[envnode[1]] ":" $0
  124.                     } else
  125.                         ENVTREE[envnode[1]] = $0
  126.                 } else
  127.                     ENVTREE[envnode[1]] = $0
  128.             }
  129.         }
  130.  
  131.         close(ENVFILES[count])
  132.     }
  133.  
  134.     for (x in ENVTREE)
  135.         print "export " x "=\"" ENVTREE[x] "\"" >> (ENVCACHE)
  136.  
  137.     for (x in ENVTREE) {
  138.     
  139.         # Print this a second time to make sure all variables
  140.         # are expanded ..
  141.         print "export " x "=\"" ENVTREE[x] "\"" >> (ENVCACHE)
  142.         print "echo \"" x "=${" x "}\"" >> (ENVCACHE)
  143.     }
  144.  
  145.     close (ENVCACHE)
  146.  
  147.     unlink(SHPROFILE)
  148.     unlink(CSHPROFILE)
  149.  
  150.     # Add warning header for SHPROFILE
  151.     print "# THIS FILE IS AUTOMATICALLY GENERATED BY env-update." > (SHPROFILE)
  152.     print "# DO NOT EDIT THIS FILE. CHANGES TO STARTUP PROFILES" >> (SHPROFILE)
  153.     print "# GO INTO /etc/profile NOT /etc/profile.env" >> (SHPROFILE)
  154.     print "" >> (SHPROFILE)
  155.     
  156.     # Add warning header for CSHPROFILE
  157.     print "# THIS FILE IS AUTOMATICALLY GENERATED BY env-update." > (CSHPROFILE)
  158.     print "# DO NOT EDIT THIS FILE. CHANGES TO STARTUP PROFILES" >> (CSHPROFILE)
  159.     print "# GO INTO /etc/csh.cshrc NOT /etc/csh.env" >> (CSHPROFILE)
  160.     print "" >> (CSHPROFILE)
  161.  
  162.  
  163.     pipe = "bash " ENVCACHE
  164.     while ((pipe | getline) > 0) {
  165.  
  166.         sub(/=/, "='")
  167.         sub(/$/, "'")
  168.  
  169.         print "export " $0 >> (SHPROFILE)
  170.  
  171.         sub(/=/, " ")
  172.  
  173.         print "setenv " $0 >> (CSHPROFILE)
  174.     }
  175.     
  176.     close(pipe)
  177.     close(SHPROFILE)
  178.     close(CSHPROFILE)
  179. }
  180.  
  181.  
  182. # vim:ts=4
  183.